package com.algorithm.learning.base.图;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: algorithm-learning
 * @description: Node结构就是 图中 点的意思
 *
 * 对于Node的结构含义，我们举一个例子, 假如有如下图：
 *
 *     a ↔ b
 *    ↙ ↘      ↖
 *   c → d → e → f
 *
 *   那么，对于节点a，它的入度为1，出度为3，nexts为[b, c, d]，edges为[a->b, a->c, a->d]
 *
 *   对于节点b，它的入度为2，出度为1，nexts为[a]，edges为[b->a]
 *
 * @author: YuKai Fan
 * @create: 2024/8/28 23:00
 **/
public class Node {

    /**
     * 当前节点的值
     */
    public int value;

    /**
     *  当前节点的入度
     *  即，有多少节点指向当前节点
     */
    public int in;

    /**
     * 当前节点的出度
     * 即，当前节点指向多少节点
     */
    public int out;

    /**
     * 当前节点直接指向的节点
     *
     * 所谓直接指向：就是从当前点出发，能直接指向的点，就是直接点
     */
    public List<Node> nexts;

    /**
     * 当前节点直接指向的边
     * 所谓直接指向：就是从当前点出发，能直接指向的点，就是直接边
     */
    public List<Edge> edges;

    public Node(int value) {
        this.value = value;
        in = 0;
        out = 0;
        nexts = new ArrayList<>();
        edges = new ArrayList<>();
    }
}
